home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
stazsoftware.com
/
www.stazsoftware.com.tar
/
www.stazsoftware.com
/
futurebasic
/
sample-code
/
helpProj.sit
/
Help Project Folder
/
HTML Cal.INCL
< prev
next >
Wrap
Text File
|
2005-04-15
|
12KB
|
485 lines
'~'2
'~'2
' MAKE HTML CALENDAR Include
'
'
'~'2
toolbox fn HRDrawInPort(HRReference hrRef,RgnHandle updateRgnH,CGrafPtr grafPtr) = OSStatus
toolbox fn HRNewReferenceInWindow(HRReference * hrRef,OSType rendererType,WindowRef inWindowRef)= OSStatus
toolbox fn HRSetWindowRef(HRReference hrRef,WindowRef windowRef) = OSStatus
toolbox fn CopyWindowTitleAsCFString( WindowRef inWindow,CFStringRef * outString ) = OSStatus
begin globals
dim gTopic$
dim @gHRref as HRReference// heavily used HR reference
dim @gPort as ^CGrafPort' as ptr// "@" means don't use register
dim @grenderRect as rect
dim gPrefFolderVol
END GLOBALS
GOTO "EndOfHTMLCAL"
CLEAR LOCAL
DIM pbBlk.128,Filename$,Index%,OSErr%,num,loop
DIM resHndl&
'~'2
LOCAL FN BuildHelpTopicList
'~'2
USERESFILE(gResRef)
num = FN countStr(_HelpListSTR)
FOR loop = num to 1 step -1
FN delElement(loop,_HelpListSTR)
next
gPrefFolderVol = FOLDER ("Help",SYSTEM(_aplvol))
Index% = 1
DO
pbBlk.ioFDirIndex% = Index%
pbBlk.ioNamePtr& = @Filename$
pbBlk.ioVRefNum% = gPrefFolderVol
pbBlk.ioDirID& = 0
#IF CarbonLib = 0
OSErr% = FN PBGetFInfoSync (pbBlk)
#ELSE
FN FBWDtoPBWD(pbBlk)
OSErr% = FN PBHGetFInfoSync (pbBlk)
#ENDIF
gFileType& = pbBlk.ioBuffer&
LONG IF OSErr% = _noErr
LONG IF gFileType& = _"TEXT"' or gFileType& = _""
FN apndElement(_HelpListSTR,Filename$)
END IF
END IF
INC (Index%)
UNTIL OSErr% <> _noErr
updateresfile(system(_aplres))
FN InitHelpTopicList
END FN
Clear Local Mode
Dim err As OSErr
Dim pb As CInfoPBRec
'~'2
Local Fn FBWDToFSSpec( @namePtr As .Str63,vRefNum As Int, fSpec As .FSSpec )
'~'2
pb.ioNamePtr = namePtr
pb.ioVRefNum = vRefNum
#If CarbonLib
Fn FBWDToPBWD( pb )
#Endif
err = Fn PBGetCatInfoSync( pb )
If err != _noErr Then Exit Fn
fSpec.name = namePtr.nil$
fSpec.vRefNum = pb.ioVRefNum
fSpec.parID = pb.ioFlParID
End Fn = err
local
dim err
'~'2
local fn setHTMLrect
'~'2
getport(gPort)
grenderRect = @gPort.portRect%
call OffsetRect(grenderRect,1,0)
call InsetRect(grenderRect,0,-1)
LONG IF window(_outputwnd) = _MyCalendarHelp2Wnd
FN pGgetObj(_MyCalendarHelp2Wnd,_HelpTopicList)
grenderRect.right% = WINDOW(_width)-2
grenderRect.bottom = gObjB'WINDOW(_height)-2
grenderRect.left% = gObjR + 16'right side of list plus scroll button
grenderRect.top% = gObjT'grenderRect.top% + 57
END IF
err = FN HRSetRenderingRect(gHRref,grenderRect)
END FN
clear local
dim err,spec as fsspec
dim rgn as rgnHandle
'~'2
local fn HTMLGotoFile(HRref as long,HTMLName$,HTMLVol%)
'~'2
fn FBmakefsspec(HTMLVol%,0,HTMLName$,spec)
err = fn HRGoToFile(HRref,#spec,_false,_zTrue)
rgn = fn NewRgn
long if rgn
RectRgn(rgn,@grenderRect)
err = fn HRdraw(gHRref,rgn)
DisposeRgn( rgn )
end if
end fn
clear local
dim err
'~'2
local fn HTMLBegin
'~'2
getport(gPort)
err = fn HRNewReference(@gHRref,_kHRRendererHTML32Type,gPort)
err = fn HRForceQuickdraw(gHRref,_false)'force quick draw drawing for this port due to some printers
err = fn HRSetdrawborder(gHRref,_zTrue)
err = FN HRSetScrollbarState(gHRref,2,2)
fn setHTMLrect
err = fn HRactivate(gHRref)
end fn = gHRref
local
dim spec as fsspec
dim err,wTitle$,outputwnd
dim @wptr&
dim rgn as rgnHandle
'~'2
local fn showLocalURL(theURL$,vRef%)
'~'2
wTitle$ = theURL$
outputwnd = WINDOW(_outputWnd)
call GetPort(gPort)
long if fn HRHTMLRenderingLibAvailable
err = fn HRDeactivate(gHRref)
err = fn HRDisposeReference(gHRref)
err = fn HRNewReference(@gHRref,_kHRRendererHTML32Type,gPort)
fn setHTMLrect
Long If Fn FBWDToFSSpec(theURL$, vRef%, spec ) = _noErr
long if fn HRGoToFile(gHRref,#spec,_false,_zTrue) = _noErr
rgn = fn NewRgn
long if( rgn )
RectRgn( rgn,grenderRect)
err = fn HRdraw(gHRref,rgn)
DisposeRgn( rgn )
end if
end if
end if
end if
WINDOW OUTPUT(outputwnd)
end fn
CLEAR LOCAL
DIM helpVRef,err
'~'2
LOCAL FN BuildHelpWindow
'~'2
LONG IF WINDOW(-_MyCalendarHelp2Wnd)
WINDOW _MyCalendarHelp2Wnd
exit fn
END IF
LONG IF fn HRHTMLRenderingLibAvailable
if gHRref then err = fn HRDeactivate(gHRref)
if gHRref then err = fn HRDisposeReference(gHRref)
gHRref = 0
FN BuildHelpTopicList
FN pGbuild(_MyCalendarHelp2Wnd)
FN DrawList(HelpList)
getport(gPort)
fn HTMLBegin
helpVRef = folder("Help",SYSTEM(_aplvol))
err = fn HRForceQuickdraw(gHRref,_false)'force quick draw drawing for this port due to some printers
fn HTMLGotoFile(gHRref,gTopic$,helpVRef)
err = fn HRactivate(gHRref)
xelse
CALL paramtext("HTML Rendering is not available on this computer. Help cannot be displayed without that carbon library!","","","")
FN pGshowErr(0)
end if
END FN
LOCAL mode
dim err,n,tvert,PageHt
dim freMem& as Sint32
dim @mp,mp2 as point
DIM renderrect as rect
dim spec as fsspec
dim @Port as ^CGrafPort
dim @gPort as ^CGrafPort
dim rgn as rgnHandle
dim @HrRef as HRReference
DIM pRecH&
'~'2
LOCAL FN PrintHtml(FileName$,helpVRef)
'~'2
'A lot more error testing can be done but adding simple beeps shows no problems with the toolbox calls
getport(gPort)'get the port data
err = fn FBmakefsspec(helpVRef,0,FileName$,spec)'make a file spec for the file in the folder passed in helpVRef
pRecH& = PRHANDLE
renderRect;8 = @PRecH&..prinfo.rPage.top%
'InsetRect(renderRect,3,3)'inset the area 3 pixels for more margin
renderRect.left = 72
renderRect.top = 20
renderRect.bottom = renderRect.bottom - 20
renderRect.right = renderRect.right - 20
PageHt = renderRect.bottom'calculate the page height
tvert = 0'grenderRect.bottom'this is where the bottom starts for the first page
err = fn HRNewReference(@HRref,_kHRRendererHTML32Type,gPort)'create a new HR reference
err = fn HRForceQuickdraw(HRref,_true)'force quick draw drawing for this port due to some printers
err = fn HRSetdrawborder(HRref,_false)'turn off drawing borders
err = FN HRSetScrollbarState(HRref,1,1)'we dont want scroll bars
err = FN HRSetRenderingRect(HRref,@renderRect)'set the html render rectangle to this size
err = fn HRGoToFile(HRref,#spec,_false,_false)'go to the file but no history and no forced refresh
err = FN HRGetRenderedImageSize(HRref,@mp)'now calculate the MAXIMUM verticle size needed to render this file
mp2.h% = 0'mp2 is a point tracking the bottom left corner of the rendering
while tvert <= mp.v%'as long as the total verticle is less than the total needed
'n needs to be refined to determine offset of last line
if tvert = 0 then n = 0 else n = 10'if this is the first page no scroll is needed
mp2.v% = tvert - n'otherwise calculate the total verticle scroll
err = FN HRScrollToLocation (HRref,@mp2)'set the scroll bar to the bottom of the previous page minus the offset
rgn = fn NewRgn'create a new empty region
long if rgn
RectRgn(rgn,@renderRect)'create a region from the rendering rectangle
Route _toPrinter'tell the system to route to the printer
getport(Port)'determine the printer port
err = fn HRDrawInPort(HRref,rgn,Port)'draw the reference using the region and printer port
DisposeRgn(rgn)'dispose of the region
clear lprint'clear the lprint for this page
end if
tvert = tvert + PageHt'add a page height to the total verticle
wend
err = fn HRDisposeReference(HRref)'dispose of global ref
close lprint'immediately close the printing
route _toscreen'route back to screen
END FN
CLEAR LOCAL
DIM TheResponse,loop,NumTopics,helpVRef,err
DIM as EventRecord evnt
dim spec as fsspec
dim @FromPage as UInt32
Dim @ToPage as UInt32
dim @w as WindowRef
dim as CFStringRef @DocTitle
dim temp$
dim @orientation as UInt16
'~'2
LOCAL FN CallPrintRoutine
'~'2
TheResponse = FN ALERT(2222,0)
IF TheResponse = 1 THEN EXIT FN
NumTopics = FN countStr(_HelpListSTR)
DEF PAGE
err = fn PMSetFirstPage(gFBPrintSettings,1, _false) ' dunno why it is _false / maybe _true works too
err = fn PMSetLastPage (gFBPrintSettings ,NumTopics, _false)
err = fn PMSetPageRange(gFBPrintSettings,1,NumTopics)
err = fn PMGetOrientation(gFBPageFormat,@orientation)
LONG IF NOT PRCANCEL
DEF LPRINT
err = Fn PMGetFirstPage(gFBPrintSettings,FromPage)
err = Fn PMGetLastPage (gFBPrintSettings,ToPage )
LONG IF NOT PRCANCEL
helpVRef = folder("Help",SYSTEM(_aplvol))'get the folder location for the file to be used
LONG IF FromPage <> 0 and FromPage <= ToPage and ToPage <> 0 and FromPage <= NumTopics and ToPage <= NumTopics
WINDOW(_MyCalendarHelp2Wnd)
for loop = FromPage to ToPage
gTopic$ = STR#(_HelpListSTR,loop)
WINDOW(_MyCalendarHelp2Wnd)
fn FBBeginSession
DocTitle = fn CFStringCreateWithPascalString(0,gTopic$,_kCFStringEncodingASCII)
err = fn PMSetJobNameCFString(gFBPrintSettings, DocTitle)
err = fn PMSetOrientation (gFBPageFormat,orientation,_false)
FN PrintHtml(gTopic$,helpVRef)
CFRelease(DocTitle)
next
fn pGClose(_MyCalendarHelp2Wnd)
gTopic$ = STR#(_HelpListSTR,1)
FN BuildHelpWindow
XELSE
TheResponse = FN ALERT(2223,0)
END IF
END IF
END IF
END FN
clear local
dim loop,gerr,helpVref
'~'1
local fn SizeHelpWnd
'~'1
FOR loop = 1 to 2
FN pGgetObj(_MyCalendarHelp2Wnd,loop)
gObjSel = loop
gObjB = WINDOW(_height)- 6
FN pGputObj(_MyCalendarHelp2Wnd,loop)
NEXT
updateresfile(gResRef)
loop = HelpList.newselect
FN InitHelpTopicList
HelpList.newselect = loop
fn PGDRAWCONTROLS
gerr = fn HRDeactivate(gHRref)
gerr = fn HRDisposeReference(gHRref)
gHRref = 0
fn HTMLBegin
fn setHTMLrect
helpVRef = folder("Help",SYSTEM(_aplvol))
gerr = fn HRForceQuickdraw(gHRref,_false)'force quick draw drawing for this port due to some printers
fn HTMLGotoFile(gHRref,gTopic$,helpVRef)
gerr = fn HRactivate(gHRref)
HRScreenConfigurationChanged
end fn
clear local
dim gerr,newx
DIM as EventRecord evnt
'~'1
local fn ResizeListArea
'~'1
gObjSelB = WINDOW(_height)-4
WHILE FN BUTTON
getmouse(gMouseY)
long if gMouseX > 90 and gMouseX < 400
setrect(gObjSelT,gMouseX - 8,gObjSelT,gMouseX + 8,WINDOW(_height)-4)
gerr = FN EventAvail(0,evnt)'allows time for system tasks and stop the spinning cursor in OSX
newx = gObjSelL
END IF
WEND
FN pGgetObj(_MyCalendarHelp2Wnd,1)
gObjR = newx
FN pGputObj(_MyCalendarHelp2Wnd,1)
FN pGgetObj(_MyCalendarHelp2Wnd,2)
gObjL = newx + 16
gObjSelL = gObjL
FN pGputObj(_MyCalendarHelp2Wnd,2)
FN pGgetObj(_MyCalendarHelp2Wnd,_SizeTheListObj)
gObjL = newx
gObjR = gObjL + 16
gObjSelL = gObjL
gObjSelR = gObjR
FN pGputObj(_MyCalendarHelp2Wnd,_SizeTheListObj)
updateresfile(gresRef)
fn SizeHelpWnd
end fn
/*begin record EventRecord
dim what as short
dim message as UInt32
dim when as UInt32
dim where as point
dim modifiers as short
end record*/
"EndOfHTMLCAL"
DIM helpVRef,gerr
dim rgn as rgnHandle
'~':
'~':
LONG IF window(_outputwnd) = _MyCalendarHelp2Wnd
long if gHRref
long if FN HRIsHREvent(event)
call FlushEvents(_everyEvent, 0 )
% event,0
gLongAction& = 0
end if
end if
end if
'~':
'~':
SELECT gLongAction&
'CASE _btnLong
CASE _oUserClick
long if gObjUserTp& = _"szee"
FN ResizeListArea
END IF
LONG IF gObjUserTp& = _"MICN" and gWhichClass = _MyCalendarHelp2Wnd
SELECT gWhichObjElem
CASE 4
HelpList.newselect = 1
gerr = fn HRDeactivate(gHRref)
gerr = fn HRDisposeReference(gHRref)
gHRref = 0
fn HTMLBegin
helpVRef = folder("Help",SYSTEM(_aplvol))
gTopic$ = "1 Introduction"
gerr = fn HRForceQuickdraw(gHRref,_false)'force quick draw drawing for this port due to some printers
fn HTMLGotoFile(gHRref,gTopic$,helpVRef)
gerr = fn HRactivate(gHRref)
CASE 5
FN CallPrintRoutine
CASE 6
fn pGClose(_MyCalendarHelp2Wnd)
gKissofDeath = _true
END SELECT
END IF
LONG IF gObjUserTp& = _"List"
LONG IF WINDOW(_outputWnd) = _MyCalendarHelp2Wnd
gTopic$ = FN DoListSelecton$(HelpList)
gerr = fn HRDeactivate(gHRref)
gerr = fn HRDisposeReference(gHRref)
gHRref = 0
fn HTMLBegin
helpVRef = folder("Help",SYSTEM(_aplvol))
fn HTMLGotoFile(gHRref,gTopic$,helpVRef)
gerr = fn HRactivate(gHRref)
setrect(gObjT,0,0,400,60)
fn invalrect(gObjT)
END IF
END IF
CASE _wClose
LONG IF gWhichClass = _MyCalendarHelp2Wnd
long if gHRref
gerr = fn HRDeactivate(gHRref)
gerr = fn HRDisposeReference(gHRref)
gHRref = 0
END IF
END IF
case _wUpdate',_wClicked
select gWhichClass
case _MyCalendarHelp2Wnd
rgn = fn NewRgn
long if(rgn)
fn setHTMLrect
gerr = fn HRactivate(gHRref)
gerr = FN HRSetRenderingRect(gHRref,grenderRect)
RectRgn(rgn,grenderRect)
gerr = fn HRdraw(gHRref,rgn)
DisposeRgn(rgn)
gerr = fn hractivate(gHRref)
flushwindowbuffer
fn validrect(gBigT)
end if
end select
CASE _wSized',_wUpdate,_wClicked
select gWhichClass
case _MyCalendarHelp2Wnd
FN SizeHelpWnd
END select
END SELECT
'~'2
IF 0 THEN RETURN